1   /*
2    * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4    *
5    * This code is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU General Public License version 2 only, as
7    * published by the Free Software Foundation.  Oracle designates this
8    * particular file as subject to the "Classpath" exception as provided
9    * by Oracle in the LICENSE file that accompanied this code.
10   *
11   * This code is distributed in the hope that it will be useful, but WITHOUT
12   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14   * version 2 for more details (a copy is included in the LICENSE file that
15   * accompanied this code).
16   *
17   * You should have received a copy of the GNU General Public License version
18   * 2 along with this work; if not, write to the Free Software Foundation,
19   * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20   *
21   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22   * or visit www.oracle.com if you need additional information or have any
23   * questions.
24   */
25  package javax.print.attribute.standard;
26  
27  import javax.print.attribute.Attribute;
28  import javax.print.attribute.SetOfIntegerSyntax;
29  import javax.print.attribute.SupportedValuesAttribute;
30  
31  /**
32   * Class NumberUpSupported is a printing attribute class, a set of integers,
33   * that gives the supported values for a {@link NumberUp NumberUp} attribute.
34   * <P>
35   * <B>IPP Compatibility:</B> The NumberUpSupported attribute's canonical array
36   * form gives the lower and upper bound for each range of number-up to be
37   * included in an IPP "number-up-supported" attribute. See class {@link
38   * javax.print.attribute.SetOfIntegerSyntax SetOfIntegerSyntax} for an
39   * explanation of canonical array form. The category name returned by
40   * <CODE>getName()</CODE> gives the IPP attribute name.
41   * <P>
42   *
43   * @author  Alan Kaminsky
44   */
45  public final class NumberUpSupported    extends SetOfIntegerSyntax
46          implements SupportedValuesAttribute {
47  
48       private static final long serialVersionUID = -1041573395759141805L;
49  
50  
51      /**
52       * Construct a new number up supported attribute with the given members.
53       * The supported values for NumberUp are specified in "array form;" see
54       * class
55       * {@link javax.print.attribute.SetOfIntegerSyntax SetOfIntegerSyntax}
56       * for an explanation of array form.
57       *
58       * @param  members  Set members in array form.
59       *
60       * @exception  NullPointerException
61       *     (unchecked exception) Thrown if <CODE>members</CODE> is null or
62       *     any element of <CODE>members</CODE> is null.
63       * @exception  IllegalArgumentException
64       *     (unchecked exception) Thrown if any element of
65       *   <CODE>members</CODE> is not a length-one or length-two array. Also
66       *    thrown if <CODE>members</CODE> is a zero-length array or if any
67       *    member of the set is less than 1.
68       */
69      public NumberUpSupported(int[][] members) {
70          super (members);
71          if (members == null) {
72              throw new NullPointerException("members is null");
73          }
74          int[][] myMembers = getMembers();
75          int n = myMembers.length;
76          if (n == 0) {
77              throw new IllegalArgumentException("members is zero-length");
78          }
79          int i;
80          for (i = 0; i < n; ++ i) {
81              if (myMembers[i][0] < 1) {
82                  throw new IllegalArgumentException
83                      ("Number up value must be > 0");
84              }
85          }
86      }
87  
88      /**
89       * Construct a new number up supported attribute containing a single
90       * integer. That is, only the one value of NumberUp is supported.
91       *
92       * @param  member  Set member.
93       *
94       * @exception  IllegalArgumentException
95       *     (Unchecked exception) Thrown if <CODE>member</CODE> is less than
96       *     1.
97       */
98      public NumberUpSupported(int member) {
99          super (member);
100         if (member < 1) {
101             throw new IllegalArgumentException("Number up value must be > 0");
102         }
103     }
104 
105     /**
106      * Construct a new number up supported attribute containing a single range
107      * of integers. That is, only those values of NumberUp in the one range are
108      * supported.
109      *
110      * @param  lowerBound  Lower bound of the range.
111      * @param  upperBound  Upper bound of the range.
112      *
113      * @exception  IllegalArgumentException
114      *     (Unchecked exception) Thrown if a null range is specified or if a
115      *     non-null range is specified with <CODE>lowerBound</CODE> less than
116      *     1.
117      */
118     public NumberUpSupported(int lowerBound, int upperBound) {
119         super (lowerBound, upperBound);
120         if (lowerBound > upperBound) {
121             throw new IllegalArgumentException("Null range specified");
122         } else if (lowerBound < 1) {
123             throw new IllegalArgumentException
124                 ("Number up value must be > 0");
125         }
126     }
127 
128     /**
129      * Returns whether this number up supported attribute is equivalent to the
130      * passed in object. To be equivalent, all of the following conditions
131      * must be true:
132      * <OL TYPE=1>
133      * <LI>
134      * <CODE>object</CODE> is not null.
135      * <LI>
136      * <CODE>object</CODE> is an instance of class NumberUpSupported.
137      * <LI>
138      * This number up supported attribute's members and <CODE>object</CODE>'s
139      * members are the same.
140      * </OL>
141      *
142      * @param  object  Object to compare to.
143      *
144      * @return  True if <CODE>object</CODE> is equivalent to this number up
145      *          supported attribute, false otherwise.
146      */
147     public boolean equals(Object object) {
148         return (super.equals (object) &&
149                 object instanceof NumberUpSupported);
150     }
151 
152     /**
153      * Get the printing attribute class which is to be used as the "category"
154      * for this printing attribute value.
155      * <P>
156      * For class NumberUpSupported, the
157      * category is class NumberUpSupported itself.
158      *
159      * @return  Printing attribute class (category), an instance of class
160      *          {@link java.lang.Class java.lang.Class}.
161      */
162     public final Class<? extends Attribute> getCategory() {
163         return NumberUpSupported.class;
164     }
165 
166     /**
167      * Get the name of the category of which this attribute value is an
168      * instance.
169      * <P>
170      * For class NumberUpSupported, the
171      * category name is <CODE>"number-up-supported"</CODE>.
172      *
173      * @return  Attribute category name.
174      */
175     public final String getName() {
176         return "number-up-supported";
177     }
178 
179 }